home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d18 / tpscrnsv.arc / SCRNCOMM.PAS < prev    next >
Pascal/Delphi Source File  |  1990-04-01  |  6KB  |  187 lines

  1. {$A-,B-,D+,E-,F-,I+,L+,N-,O-,R+,S+,V+}
  2. {$M 5000,0,0}
  3.  
  4. PROGRAM SCSVCOMM;
  5.  
  6.    Uses CRT,DOS;
  7.  
  8.    CONST TSR_Signature:String='The SCRNSAVE - Memory-resident Program by Ilya Shlyakhter';
  9.  
  10.    TYPE Address=RECORD
  11.                   CASE Boolean OF
  12.                     True:(Offset,Segment:Word);
  13.                     False:(Ptr:Pointer)
  14.                 END;
  15.  
  16. { *****************************DupCheck*********************************** }
  17.  
  18.   FUNCTION DupCheck:Byte;
  19.  
  20.     CONST Dif=451;
  21.           Signature_Offset=28;
  22.  
  23.     VAR Vec:Word;
  24.         IntrAddress:Address;
  25.         Current_Signature:String;
  26.         Length_of_TSR_Signature:Byte Absolute TSR_Signature;
  27.  
  28.         Done:Boolean;
  29.  
  30.     BEGIN {DupCheck}
  31.       Vec:=$60;
  32.       Done:=False;
  33.  
  34.       WHILE (Vec<$68) And Not Done DO
  35.         BEGIN
  36.           GetIntVec(Vec,IntrAddress.Ptr);
  37.           IF IntrAddress.Ptr=Nil THEN
  38.             BEGIN {If TSR has not yet been installed...}
  39.               DupCheck:=0;
  40.               Done:=True
  41.             END
  42.               ELSE {If TSR may have been installed...}
  43.                 BEGIN
  44.                   Move(Mem[IntrAddress.Segment+Dif:Signature_Offset],
  45.                                   Current_Signature,Length_of_TSR_Signature+1);
  46.                   IF Current_Signature=TSR_Signature THEN
  47.                     BEGIN
  48.                       DupCheck:=Vec;
  49.                       Done:=True
  50.                     END
  51.                       ELSE Inc(Vec)
  52.                 END {of If TSR may have been installed...}
  53.         END; {of While...}
  54.  
  55.         IF Not Done THEN
  56.            DupCheck:=0;
  57.  
  58.       END; {of DupCheck}
  59.  
  60. { **************************Variables used by TSR************************* }
  61.  
  62.    VAR TSR_Int:Byte;
  63.        TSR_AX:Word;
  64.        TSR_BX:Word;
  65.  
  66.        Suspended:Boolean;
  67.        Done:Boolean;
  68.        Ch:Char;
  69.  
  70.        Regs:Registers;
  71.        Parameter:String[9];
  72.        Length_of_Parameter:Byte Absolute Parameter;
  73.        I:Byte;
  74.        Code:Word;
  75.        New_Time_Limit:Real;
  76.  
  77. { **************************Outer block of the TSR*********************** }
  78.  
  79.   BEGIN
  80.     TSR_Int:=DupCheck;
  81.  
  82.     IF TSR_Int>0 THEN
  83.       BEGIN
  84.         FillChar(Regs,SizeOf(Regs),0);
  85.         IF ParamCount>0 THEN
  86.           BEGIN
  87.             Parameter:=ParamStr(1);
  88.             FOR I:=1 TO Length_of_Parameter DO
  89.               Parameter[I]:=UpCase(Parameter[I]);
  90.  
  91.             WITH Regs DO
  92.               IF Parameter='STOP' THEN AX:=1
  93.                 ELSE
  94.                   IF Parameter='HOLD' THEN AX:=2
  95.                     ELSE
  96.                       IF Parameter='RESTART' THEN AX:=3
  97.                         ELSE
  98.                           IF Parameter='TIMELIMIT' THEN
  99.                             BEGIN
  100.                               Val(ParamStr(2),New_Time_Limit,Code);
  101.                               IF (Code=0) And (New_Time_Limit>0) And
  102.                                   (New_Time_Limit<11) THEN
  103.                                   BEGIN {Install new time limit}
  104.                                     FillChar(Regs,SizeOf(Regs),0);
  105.                                     Regs.AX:=8;
  106.                                     Regs.BX:=Trunc(New_Time_Limit*18.2*60)
  107.                                   END
  108.                                     ELSE
  109.                                       Writeln('Invalid time limit: ',ParamStr(2))
  110.                             END
  111.                          ELSE AX:=15;
  112.  
  113.             IF Regs.AX<15 THEN
  114.               Intr(TSR_Int,Regs)
  115.                 ELSE
  116.                   BEGIN
  117.                     Writeln;
  118.                     Write('SCSVCOMM: Invalid parameter ',Parameter);
  119.                   END
  120.           END
  121.         ELSE
  122.           BEGIN
  123.  
  124.             FillChar(Regs,SizeOf(Regs),0);
  125.             Regs.AX:=5; {Get status of resident SCRNSAVE}
  126.             Intr(TSR_Int,Regs);
  127.             Suspended:=(Regs.AX=5);
  128.             FillChar(Regs,SizeOf(Regs),0);
  129.  
  130.             Write('Current  SCRNSAVE status: ');
  131.             IF Suspended THEN
  132.                 Writeln('Active')
  133.               ELSE
  134.                 Writeln('Suspended');
  135.             Writeln;
  136.             Write('Unload, ');
  137.             IF Suspended THEN
  138.               Write('Restart, ')
  139.                 ELSE
  140.                   Write('Suspend, ');
  141.  
  142.             Writeln('Change time limit? ');
  143.             Done:=True;
  144.  
  145.             REPEAT
  146.               Ch:=ReadKey;
  147.               IF Ch=#0 THEN
  148.                 BEGIN
  149.                   Ch:=ReadKey;
  150.                   Done:=False
  151.                 END
  152.                   ELSE
  153.                     BEGIN
  154.                       Ch:=UpCase(Ch);
  155.                       IF Ch='U' THEN BEGIN Regs.AX:=1;Intr(TSR_Int,Regs) END
  156.                         ELSE IF Suspended And (Ch='R') THEN BEGIN Regs.AX:=3;Intr(TSR_Int,Regs) END ELSE
  157.                              IF Not Suspended And (Ch='S') THEN BEGIN Regs.AX:=2;Intr(TSR_Int,Regs) END ELSE
  158.                               IF Ch='C' THEN
  159.                                BEGIN
  160.                                  Write('New time limit: ');
  161.                                  Readln(Parameter);
  162.                                  Val(Parameter,New_Time_Limit,Code);
  163.  
  164.                                  IF (Code=0) And (New_Time_Limit>0) And
  165.                                      (New_Time_Limit<11) THEN
  166.                                      BEGIN {Install new time limit}
  167.                                        FillChar(Regs,SizeOf(Regs),0);
  168.                                        Regs.AX:=8;
  169.                                        Regs.BX:=Trunc(New_Time_Limit*18.2*60);
  170.                                        Intr(TSR_Int,Regs)
  171.                                      END
  172.                                        ELSE
  173.                                          Writeln('Invalid time limit: ',Parameter)
  174.  
  175.                                END  ELSE Done:=False
  176.                     END;
  177.               UNTIL Done;
  178.           END {of prompting the user that no params have been given}
  179.        END
  180.             ELSE {If TSR has not been installed yet...}
  181.               BEGIN
  182.                 Writeln;
  183.                 Writeln('SCSVCOMM: Screen Saver not installed yet.');
  184.                 Writeln
  185.               END
  186.  END.
  187.